package com.gzz.retail.facade;
/**
 * 是整个系统对外暴露服务的层
 * 负责向用户显示信息和解释用户命令
 * 请求应用层以获取用户所需要展现的数据（比如获取首页的商品数据）
 * 发送命令给应用层要求其执行某个用户命令（实现某个业务逻辑，比如用户要进行转账）
 * 用户界面层应该包含以下的内容：
 * <p>
 * 数据传输对象（Data Transfer Object）:
 * DTO也常被称作值对象，VO实质上与领域层的VO并不相同DTO是数据传输的载体，
 * 内部不应该存在任何业务逻辑，通过DTO把内部的领域对象与外界隔离。
 * <p>
 * 装配（Assembler）：
 * 实现DTO与领域对象之间的相互转换，数据交换，因些Assembler几乎总是和DTO一起出现
 * <p>
 * 门面（Facade）：
 * Facade的用意在于为远程客户端提供粗粒度的调用接口中，
 * 它的主要工作就是将一个用户请求委派给一个或多个Service进行处理，也就是我们常说的Controller。
 * <p>
 * ######################################################################################
 * 可能提供包括web services、rmi或rest等在内的一种或多种通信接口。
 * 该层主要由facade、dto和assembler三类组件构成
 *
 *
 *
 *
 * Anti-Corruption Layer
 *
 * （防腐层或ACL）。很多时候我们的系统会去依赖其他的系统，而被依赖的系统可能包含不合理的数据结构、API、协议或技术实现，
 * 如果对外部系统强依赖，会导致我们的系统被”腐蚀“。
 * 这个时候，通过在系统间加入一个防腐层，能够有效的隔离外部依赖和内部逻辑，无论外部如何变更，内部代码可以尽可能的保持不变。
 *

 */